বিতরণের ভূমিকা
ডেলিভারি কৌশলগুলি উত্পাদনে আপনার Node.js অ্যাপ্লিকেশনগুলি কীভাবে বিতরণ এবং পরিচালনা করতে হয় তার উপর ফোকাস করে৷
একটি আধুনিক Node.js বিতরণের মূল বৈশিষ্ট্য:
ঘনীভবন
আপনার অ্যাপ্লিকেশন এবং নির্ভরতাকে একটি পাত্রে প্যাকেজ করুন যা পরিবেশ জুড়ে নির্বিঘ্নে চলে
ইন্টিগ্রেশন
কুবারনেটস বা ডকার সোয়ার্মের মতো সরঞ্জামগুলির সাহায্যে স্বয়ংক্রিয় ধারক ব্যবস্থাপনা
CI/CD
স্বয়ংক্রিয় পরীক্ষা এবং বিতরণ পাইপলাইন
মেঘ-দেশীয়
ক্লাউড পরিষেবা এবং সার্ভারহীন অপারেশন ব্যবহার করুন
IaC
স্থিতিস্থাপক উত্পাদনশীলতা বিতরণের জন্য একটি প্রতীক হিসাবে অবকাঠামো সংজ্ঞায়িত করুন
নিরীক্ষণ করার ক্ষমতা
আপনার অ্যাপ্লিকেশনের কর্মক্ষমতা এবং স্বাস্থ্য নিরীক্ষণ
ডকারের সাথে কন্টেইনারাইজেশন
ধারকগুলি আপনার অ্যাপ্লিকেশন এবং এর নির্ভরতাগুলিকে একটি প্রমিত ইউনিটে প্যাকেজ করে, বিভিন্ন পরিবেশে সামঞ্জস্যপূর্ণ আচরণ নিশ্চিত করে।
Node.js অ্যাপ্লিকেশনের জন্য ডকার হল সবচেয়ে জনপ্রিয় কন্টেইনারাইজেশন প্ল্যাটফর্ম।
Node.js এর জন্য ডকারের সুবিধা
একটি Node.js অ্যাপ্লিকেশন ডকারাইজ করা
উদাহরণ: Node.js-এর জন্য বেসিক ডকারফাইল
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["node", "app.js"]
এই মৌলিক ডকারফাইল:
আপনার ডকার কন্টেইনার কনফিগার করা এবং চালানো হচ্ছে
# Build the image
docker build -t my-nodejs-app .
# Run the container
docker run -p 8080:8080 my-nodejs-app
উন্নত ছবির জন্য মাল্টি-লেভেল আর্কিটেকচার
মাল্টি-লেভেল আর্কিটেকচার রানটাইম এনভায়রনমেন্ট থেকে কনফিগারেশন এনভায়রনমেন্টকে আলাদা করে ছোট, আরও সুরক্ষিত ছবি তৈরি করে:
উদাহরণ: মাল্টি-লেভেল ডকারফাইল
# Build stage
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
# Production stage
FROM node:20-alpine
WORKDIR /app
COPY --from=build /app/node_modules ./node_modules
COPY . .
# Set NODE_ENV
ENV NODE_ENV=production
# Non-root user for security
USER node
EXPOSE 8080
CMD ["node", "app.js"]
কেন বহু-স্তরের কাঠামো?
মাল্টি-কন্টেইনার অ্যাপ্লিকেশনের জন্য ডকার কম্পোজ
একাধিক পরিষেবা সহ অ্যাপ্লিকেশনগুলির জন্য (যেমন Node.js অ্যাপ্লিকেশন + ডাটাবেস), মাল্টি-কন্টেইনার অ্যাপ্লিকেশন সংজ্ঞায়িত এবং চালানোর জন্য ডকার কম্পোজ ব্যবহার করুন:
উদাহরণ: docker-compose.yml
version: '3.8'
services:
# Node.js application
app:
build: .
ports:
- "8080:8080"
environment:
- NODE_ENV=production
- DB_HOST=db
- DB_USER=user
- DB_PASSWORD=password
- DB_NAME=myapp
depends_on:
- db
restart: unless-stopped
# Database
db:
image: postgres:14
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=myapp
restart: unless-stopped
volumes:
postgres_data:
# Start all services
docker-compose up
# Start in detached mode
docker-compose up -d
# Stop all services
docker-compose down
ইন্টিগ্রেশন জন্য Kubernetes
কন্টেইনারাইজড অ্যাপ্লিকেশনগুলির উত্পাদন-গ্রেড একীকরণের জন্য, কুবারনেটস শক্তিশালী বৈশিষ্ট্যগুলি সরবরাহ করে:
স্বয়ংক্রিয় স্কেলিং
লোডের উপর ভিত্তি করে পাত্রের স্বয়ংক্রিয় স্কেলিং
স্ব-নিরাময়
ব্যর্থ কন্টেইনার পুনরায় চালু করা হচ্ছে
পরিষেবা আবিষ্কার এবং লোড ব্যালেন্সিং
রোলিং আপডেট এবং রোলব্যাক
স্টোরেজ একত্রীকরণ
Node.js-এর জন্য একটি মৌলিক Kubernetes বিতরণ
উদাহরণ: deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nodejs-app
spec:
replicas: 3
selector:
matchLabels:
app: nodejs-app
template:
metadata:
labels:
app: nodejs-app
spec:
containers:
- name: nodejs-app
image: your-registry/nodejs-app:latest
ports:
- containerPort: 8080
env:
- name: NODE_ENV
value: "production"
resources:
limits:
cpu: "500m"
memory: "512Mi"
requests:
cpu: "200m"
memory: "256Mi"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
Node.js-এর জন্য একটি Kubernetes পরিষেবা
উদাহরণ: service.yaml
apiVersion: v1
kind: Service
metadata:
name: nodejs-service
spec:
selector:
app: nodejs-app
ports:
- port: 80
targetPort: 8080
type: LoadBalancer
ক্লাউড সাইট ডেলিভারি
ক্লাউড প্ল্যাটফর্মগুলি ন্যূনতম কনফিগারেশন সহ Node.js অ্যাপ্লিকেশনগুলি বিতরণ করতে ব্যবহারের জন্য প্রস্তুত অবকাঠামো এবং পরিষেবা সরবরাহ করে। এই প্ল্যাটফর্মগুলি অবকাঠামো ব্যবস্থাপনার বেশিরভাগ জটিলতা দূর করে।
Node.js এর জন্য জনপ্রিয় ক্লাউড প্ল্যাটফর্ম
| সাইট | বৈশিষ্ট্য | সেরা |
|---|---|---|
| Heroku | Git , , | দ্রুত প্রোটোটাইপিং, স্টার্টআপ, সহজ বিতরণ |
| AWS Elastic Beanstalk | স্বয়ংক্রিয় স্কেলিং, লোড ব্যালেন্সিং, স্বাস্থ্য পর্যবেক্ষণ | AWS পরিবেশ একীকরণ, এন্টারপ্রাইজ অ্যাপ্লিকেশন |
| Google App Engine | স্বয়ংক্রিয় স্কেলিং, ট্রাফিক বিচ্ছেদ, ed | গুগল ক্লাউড পরিবেশ, উচ্চ ট্রাফিক অ্যাপ্লিকেশন |
| Azure App Service | অন্তর্নির্মিত CI/CD, স্টেজিং পরিবেশ, সহজ মাপযোগ্যতা | মাইক্রোসফ্ট পরিবেশ, এন্টারপ্রাইজ অ্যাপ্লিকেশন |
| Vercel | প্রিভিউ ডিস্ট্রিবিউশন, গ্লোবাল CDN, Next.js-এ আপগ্রেড করা হয়েছে | ফ্রন্ট-এন্ড-ফোকাসড অ্যাপ্লিকেশন, JAMstack অ্যাপ্লিকেশন |
| DigitalOcean App Platform | সহজ মূল্য, অন্তর্নির্মিত ট্র্যাকিং, স্বয়ংক্রিয় স্কেলিং | ছোট থেকে মাঝারি অ্যাপ্লিকেশন, খরচ-সংবেদনশীল বিতরণ |
উদাহরণ: হেরোকুতে স্থাপন করা
Heroku Node.js অ্যাপ্লিকেশনের জন্য সবচেয়ে সহজ স্থাপনার ওয়ার্কফ্লো প্রদান করে:
পূর্বশর্ত
# Install Heroku CLI
npm install -g heroku
# Login to Heroku
heroku login
হেরোকুকে কীভাবে আপনার অ্যাপ্লিকেশন চালাতে হয় তা জানাতে আপনার প্রকল্পের মূলে একটি প্রোফাইল তৈরি করুন:
Procfile
web: node app.js
আপনার অ্যাপ বিতরণ করুন:
# Initialize Git if needed
git init
git add .
git commit -m "Initial commit"
# Create a Heroku app
heroku create my-nodejs-app
# Deploy to Heroku
git push heroku main
# Scale your app (optional)
heroku ps:scale web=1
# Open your app in browser
heroku open
প্রসঙ্গ-নির্দিষ্ট কনফিগারেশন
যেকোনো ক্লাউড ডিস্ট্রিবিউশনের জন্য, নিশ্চিত করুন যে আপনার অ্যাপ্লিকেশনটি উৎপাদনের জন্য কনফিগার করা হয়েছে:
উদাহরণ: প্রসঙ্গ কাঠামো সহ app.js
const express = require('express');
const app = express();
// Environment variables with fallbacks
const PORT = process.env.PORT || 8080;
const NODE_ENV = process.env.NODE_ENV || 'development';
const DB_URI = process.env.DB_URI || 'mongodb://localhost:27017/myapp';
app.get('/', (req, res) => {
res.send(`Hello from ${NODE_ENV} environment!`);
});
app.listen(PORT, () => {
console.log(`Server running on port ${PORT} in ${NODE_ENV} mode`);
});
সার্ভারহীন বিতরণ
সার্ভারহীন কম্পিউটিং আপনাকে সার্ভার সম্পর্কে চিন্তা না করেই অ্যাপ্লিকেশন তৈরি এবং চালানোর অনুমতি দেয়।
এটি স্বয়ংক্রিয় স্কেলিং, অন্তর্নির্মিত উচ্চ প্রাপ্যতা এবং একটি পে-অ্যাজ-ইউ-গো বিলিং মডেল অফার করে।
Node.js এর জন্য সার্ভারলেস এর সুবিধা
জনপ্রিয় সার্ভারহীন সাইট
AWS Lambda
Azure Functions
Google Cloud Functions
Vercel Functions
Netlify Functions
উদাহরণ: AWS Lambda ফাংশন
একটি সাধারণ AWS Lambda ফাংশন (handler.js)
module.exports.hello = async (event) => {
const name = event.queryStringParameters?.name || 'World';
return {
statusCode: 200,
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(
{
message: `Hello, ${name}!`,
timestamp: new Date().toISOString(),
},
),
};
};
উদাহরণ: সার্ভারহীন কনফিগারেশন কনফিগারেশন
একটি সার্ভারহীন আর্কিটেকচার ব্যবহার করে সার্ভারবিহীন অ্যাপ্লিকেশন বিতরণ এবং পরিচালনা করা সহজ করে তোলে:
serverless.yml
service: my-nodejs-api
provider:
name: aws
runtime: nodejs16.x
region: us-east-1
environment:
NODE_ENV: production
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
cors: true
getUser:
handler: users.getUser
events:
- http:
path: users/{id}
method: get
cors: true
সার্ভারহীন বিবেচনা:
Node.js অ্যাপ্লিকেশনের জন্য CI/CD
ক্রমাগত ইন্টিগ্রেশন এবং অবিচ্ছিন্ন ডেলিভারি (CI/CD) পাইপলাইনগুলি নির্ভরযোগ্য এবং সামঞ্জস্যপূর্ণ ডেলিভারি নিশ্চিত করে টেস্টিং এবং ডেলিভারি প্রক্রিয়া স্বয়ংক্রিয় করে।
একটি CI/CD পাইপলাইনের প্রধান উপাদান
উৎস নিয়ন্ত্রণ একীকরণ
গিটহাব, গিটল্যাব ইত্যাদি
স্বয়ংক্রিয় পরীক্ষা
ইউনিট, ইন্টিগ্রেশন, সম্পূর্ণ-নোড পরীক্ষা
স্ট্যান্ডার্ড সূচক বিশ্লেষণ এবং আস্তরণের
নিরাপত্তা স্ক্যানিং
গঠন এবং সংশ্লেষণ
স্টেজিং এবং উত্পাদন ডেলিভারি
উদাহরণ: গিটহাব অ্যাকশন ওয়ার্কফ্লো
.github/workflows/deploy.yml
name: Deploy Node.js Application
on:
push:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Run linting
run: npm run lint
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to production
uses: some-action/deploy-to-cloud@v1
with:
api-key: ${{ secrets.DEPLOY_API_KEY }}
app-name: my-nodejs-app
environment: production
কোড হিসাবে পরিকাঠামো (IaC)
IaC সরঞ্জামগুলি আপনাকে কোড ফাইলগুলিতে আপনার পরিকাঠামো সংজ্ঞায়িত করতে দেয়, সংস্করণ-নিয়ন্ত্রিত, পুনরুত্পাদনযোগ্য স্থাপনা প্রদান করে।
জনপ্রিয় IaC টুল
Terraform
একটি ক্লাউড-অজ্ঞেয়বাদী IaC টুল
AWS CloudFormation
AWS-নির্দিষ্ট IaC পরিষেবা
Azure Resource Manager
একটি Azure-নির্দিষ্ট IaC পরিষেবা
Pulumi
IaC পরিচিত প্রোগ্রামিং ভাষা ব্যবহার করে
উদাহরণ: টেরাফর্ম কনফিগারেশন
main.tf
provider "aws" {
region = "us-east-1"
}
resource "aws_instance" "nodejs_server" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.micro"
tags = {
Name = "nodejs-app-server"
}
user_data = <<-EOF
#!/bin/bash
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
mkdir -p /app
cd /app
echo 'console.log("Hello from Node.js");' > app.js
node app.js
EOF
}
resource "aws_security_group" "app_sg" {
name = "app-security-group"
description = "Allow web traffic"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
Node.js এর সাথে এজ কম্পিউটিং
এজ কম্পিউটিং কম্পিউটেশন এবং ডেটা স্টোরেজকে যেখানে প্রয়োজন তার কাছাকাছি নিয়ে আসে, প্রতিক্রিয়ার সময় উন্নত করে এবং ব্যান্ডউইথের ব্যবহার কমায়।
Node.js - I/O .
Node.js-এর জন্য এজ কম্পিউটিং প্ল্যাটফর্ম
| সাইট | ব্যাখ্যা | মূল বৈশিষ্ট্য |
|---|---|---|
| Vercel Edge Functions | প্রান্তে সার্ভারহীন ক্রিয়াকলাপ বিতরণ করুন | গ্লোবাল CDN, অতি-লো লেটেন্সি, বিল্ট-ইন ক্যাশে |
| Cloudflare Workers | প্রান্তে সার্ভারহীন প্রক্রিয়াকরণ | বিচ্ছিন্ন V8 উদাহরণ, 0ms কোল্ড বুট, 200+ অবস্থান |
| Fastly Compute@Edge | এজ কম্পিউট প্ল্যাটফর্ম | সাব-এমএস লেটেন্সি, ওয়েব অ্যাসেম্বলি সাপোর্ট, গ্লোবাল নেটওয়ার্ক |
| Deno Deploy | জাভাস্ক্রিপ্ট/টাইপস্ক্রিপ্টের জন্য এজ রানটাইম | V8-এ নির্মিত, বিশ্বব্যাপী বিতরণ করা, WebAssembly সমর্থন |
উদাহরণ: Node.js এর সাথে Cloudflare Worker
worker.js
// Handle incoming requests
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
// Get visitor's country from Cloudflare headers
const country = request.cf.country || 'unknown';
// Custom response based on location
const html = `
Edge Computing Demo
Hello from ${country}!
Served from ${new Date().toISOString()}
`;
return new Response(html, {
headers: { 'content-type': 'text/html;charset=UTF-8' },
});
}
উদাহরণ: Vercel Edge Middleware
middleware.js
import { NextResponse } from 'next/server';
// Runs on every request to your site
export function middleware(request) {
// Get the user's country from the request
const country = request.geo.country || 'US';
// Rewrite to a country-specific page if needed
if (country === 'GB') {
return NextResponse.rewrite('/uk-home');
}
// Add a custom header
const response = NextResponse.next();
response.headers.set('x-edge-runtime', 'true');
return response;
}
// Only run on specific paths
export const config = {
matcher: ['/', '/about/:path*'],
};
এজ কম্পিউটিং ব্যবহারের ক্ষেত্রে
কর্মক্ষমতা
- বিশ্বব্যাপী ব্যবহারকারীদের জন্য কম বিলম্বিতা
- দ্রুত সামগ্রী বিতরণ
- প্রথম বাইটের জন্য উন্নত সময় (TTFB)
- দক্ষ ক্যাশিং কৌশল
ফাংশন
- ব্যক্তিগতকৃত সামগ্রী বিতরণ
- A/B পরীক্ষা এবং বৈশিষ্ট্য পতাকা
- বট নিরাপত্তা এবং নিরাপত্তা
- স্বীকৃতি এবং স্বীকৃতি
আধুনিক বিতরণের জন্য সর্বোত্তম অনুশীলন
শূন্য-ঢালু বিতরণ
নীল-সবুজ বা ক্যানারি ডেলিভারি কৌশল ব্যবহার করুন
কন্টেইনার নিরাপত্তা
ছবি স্ক্যান করুন, ন্যূনতম বেস ইমেজ ব্যবহার করুন এবং অ-রুট ব্যবহারকারী ব্যবহার করুন
পরিবেশ পরিবর্তনশীল
সমস্ত কনফিগারেশনের জন্য পরিবেশ ভেরিয়েবল ব্যবহার করুন
গোপনীয় ব্যবস্থাপনা
নিবেদিত গোপনীয়তা ব্যবস্থাপনা সমাধান ব্যবহার করুন
স্বাস্থ্য পরীক্ষা
ব্যাপক স্বাস্থ্য এবং প্রস্তুতি পরীক্ষা বাস্তবায়ন করুন
পর্যবেক্ষণ এবং রেকর্ডিং
সম্পূর্ণ পর্যবেক্ষণ এবং কেন্দ্রীভূত লগিং সেট আপ করুন
স্বয়ংক্রিয় স্কেলিং
লোড মেট্রিক্সের উপর ভিত্তি করে উপযুক্ত স্কেলিং নীতিগুলি কনফিগার করুন
ডাটাবেস মাইগ্রেশন
স্বয়ংক্রিয় এবং সংস্করণ ডাটাবেস স্কিমা পরিবর্তন
সারাংশ
একটি আধুনিক Node.js ডিস্ট্রিবিউশনের মধ্যে রয়েছে কন্টেইনারাইজেশন, ইন্টিগ্রেশন, ক্লাউড প্ল্যাটফর্ম, সার্ভারহীন কম্পিউটিং এবং DevOps অনুশীলন।
এই পন্থা অবলম্বন করে, আপনি অর্জন করতে পারেন: